Computers in general utilize a number of individual processing modules or sections, each accomplishing a different part or task related to solving a problem. These processing modules may include a control module, an input-output controller, an arithmetic unit, a data memory unit, and buffering between the units. In the past, the modules have been interconnected with a number of data buses which carry information and commands to and from the various modules in the computer. In order to achieve a certain amount of uniformity, each of the modules is provided with a fixed number of input/output terminals, standardized so as to be able to accommodate a fixed number of data buses.
In the past, in order to achieve flexibility, enough data buses were provided so that all computer functions could be accommodated and so that communications between each of the processing parts would not be limited. This resulted in an overly large number of data buses and/or connections because some of the modules simply had no need for all of the data buses. Moreover, some of the modules use some data buses only infrequently. This is because an individual module for most of its computational task requires only a small sub-set of data buses.
Put another way, most computer processing can be characterized by a very simple connection diagram or circuit between the processing units. However, in a small, infrequently-occuring, but important class of computational problems a more complex bus structure is required. In order for computational machines to accommodate such significant but not usual computational problems, it is standard practice in the industry to provide an overly large number of buses to accommodate a worse case situation.
Reduction of number of buses and interconnects is important for the following reasons:
It will be appreciated that for some of the modules there will be many unused or infrequently-used input/output terminals. Thus reduction of buses and interconnects is possible. Moreover, in any computational processing system the lower the number of connections and buses, the higher will be the reliability of the machine. Not only is reliability based upon the number of interconnects, but it is also based upon the amount of cross-talk between data buses. In order to increase reliability, it is important to reduce the number of infrequently-used data buses and connections.
Additionally, as the number of components that can be placed on a given semi-conductor chip increases, there is a premium on designs which can reduce the number of input/output pins or connections to each chip. This is because in the end the size of the chip itself limits the number of input/output pins.
Another pressing problem in the utilization of computers is the ability to test the modules within the computer so as to trouble-shoot. One of the purposes of utilizing a diagnostic procedure is to ascertain, when a problem arises, whether it is due to a hardware problem or a software problem. Trouble-shooting normally requires being able to read out the output of a given module or given set of circuits within a module. This may be accomplished by reading out the values of stored information within the module.
Normal testing procedures are hampered because the computer modules do not function in the same way when being tested as they do when they are in actual operation. For instance, most diagnostic tests require additional built-in circuits wich monitor the operation of the module. In this manner, machine operation is "simulated".
Simulation is, in a sense, the simplified running of the computer, and therefore, the diagnostic test which tests for pre-determined conditions can run rapidly and hopefully all-inclusively. However, in the simulation of any machine, there is not necessarily a correspondence between a test of the simulated machine as opposed to the test of the real machine. This in turn results in errors which cannot be diagnosed with present systems.
What this means is that the test program or diagnostic does not monitor the normal operation of the computer, and therefore introduces an uncertainty as to whether any problem is due to a fault in the testing circuits or a fault in the computer hardware/software implementation. Put differently, the diagnostic testing of computers has utilized programs and apparatus which are in effect add-on circuits, and it is the condition of these add-on circuits which are introduced to indicate the status of the circuits which are actually doing the computations. Thus, in diagnostic testing, one normally introduces a change in the operation of the machine from its normal mode to the diagnostic mode. The problem with changing the mode of operation of the machine is that in all instances it is not entirely clear when running in the diagnostic mode that the machine will function properly in a normal running mode.
Moreover, it is highly desirable in software diagnostics that one be able to in effect stop the machine at a variety of different places in order to ascertain the condition of the machine at that particular point in time, and it is desirable to be able to do this without disturbing the normal operational mode of the machine. This allows for diagnosis of software errors on the actual machine and eliminates the need for having a simulation of the machine.